﻿#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
#include <functional>

using namespace std;

//int main()
//{
//	//1）无参构造一个空的容器
//	vector<int> v1; //构造一个int类型的空容器
//
//	//2）构造并初始化 n 个 val 容器 
//	vector<int> v2(3, 6); //构造含有3个6的int类型容器
//
//	//3）拷贝构造某类型容器
//	vector<int> v3(v2); //拷贝构造int类型的v2容器
//
//	//4）使用迭代器进行初始化构造
//	vector<int> v4(v2.begin()+1, v2.end()-1); //使用迭代器拷贝构造v2容器的某一段内容
//
//	string s("hello world");
//	vector<char> v5(s.begin(), s.end()); //拷贝构造string对象的某一段内容
//
//
//	return 0;
//}

//int main()
//{
//	vector<int> v1; // 定义容器v1
//
//	// 尾插5个数据
//	v1.push_back(1);
//	v1.push_back(2);
//	v1.push_back(3);
//	v1.push_back(4);
//	v1.push_back(5);
//
//	// 使用下标访问数据
//	for (size_t i = 0; i < v1.size(); ++i)
//	{
//		cout << v1[i] << " ";
//	}
//	cout << endl;
//
//	// 使用下标修改数据
//	for (size_t i = 0; i < v1.size(); ++i)
//	{
//		v1[i] += 3;
//		cout << v1[i] << " ";
//	}
//	cout << endl;
//
//	return 0;
//}

//int main()
//{
//	vector<int> v2; // 定义容器v2
//
//	// 尾插5个数据
//	v2.push_back(1);
//	v2.push_back(2);
//	v2.push_back(3);
//	v2.push_back(4);
//	v2.push_back(5);
//
//	// 使用迭代器访问数据
//	vector<int>::iterator it1 = v2.begin();
//	while (it1 != v2.end())
//	{
//		cout << *it1 << " ";
//		it1++;
//	}
//	cout << endl;
//
//	// 使用迭代器修改数据
//	vector<int>::iterator it2 = v2.begin();
//	while (it2 != v2.end())
//	{
//		*it2 += 1;
//		cout << *it2 << " ";
//		it2++;
//	}
//
//	return 0;
//}

//int main()
//{
//	vector<int> v3; // 定义容器v3
//
//	// 尾插5个数据
//	v3.push_back(1);
//	v3.push_back(2);
//	v3.push_back(3);
//	v3.push_back(4);
//	v3.push_back(5);
//
//	// 使用范围for访问数据
//	for (auto a : v3)
//	{
//		cout << a << " ";
//	}
//	cout << endl;
//
//	// 使用范围for修改数据
//	for (auto& a : v3)
//	{
//		a += 4;
//		cout << a << " ";
//	}
//
//	return 0;
//}

//int main()
//{
//	vector<int> v(6, 5);	//定初始化6个5
//
//	//获取当前容器中的容量大小
//	cout << v.capacity() << endl; // 结果：6
//
//	return 0;
//}

//int main()
//{
//	size_t sz;
//
//	vector<int> v;
//
//	sz = v.capacity();
//
//	cout << "making for grow:\n";
//
//	for (int i = 0; i < 100; ++i) {
//		v.push_back(i);
//		if (sz != v.capacity()) {
//			sz = v.capacity();
//			cout << "capacity changed: " << sz << endl;
//		}
//	}
//
//	return 0;
//}

//int main()
//{
//	vector<int> v;
//
//	v.reserve(100); // 提前开好100空间
//
//	//......
//
//	return 0;
//}

//int main()
//{
//	vector<int> v1(3, 6);
//	cout << v1.empty() << endl; // v1非空，输出0
//
//	vector<int> v2;
//	cout << v2.empty() << endl; // v2为空，输出1
//
//	return 0;
//}

//int main()
//{
//	vector<int> v1(6, 3);
//
//	v1.reserve(20);
//	cout << v1.capacity() << endl;
//	cout << v1.size() << endl << endl;
//
//	v1.resize(10);
//	cout << v1.capacity() << endl;
//	cout << v1.size() << endl;
//
//	return 0;
//}

//int main()
//{
//	vector<int> v;
//
//	//使用push_back插入5个数据
//	v.push_back(1);
//	v.push_back(2);
//	v.push_back(3);
//	v.push_back(4);
//	v.push_back(5);
//
//	//打印
//	for (auto e : v) 
//	{
//		cout << e << " ";
//	}
//
//	return 0;
//}

//int main()
//{
//	vector<int> v;
//
//	//使用push_back尾插6个数据
//	v.push_back(1);
//	v.push_back(2);
//	v.push_back(3);
//	v.push_back(4);
//	v.push_back(5);
//	v.push_back(6);
//
//	//使用pop_back尾删3个数据
//	v.pop_back();
//	v.pop_back();
//	v.pop_back();
//	v.pop_back();
//
//	//打印
//	for (auto e : v) 
//	{
//		cout << e << " ";
//	}
//
//	return 0;
//}

//int main()
//{
//	vector<int> v;
//
//	v.push_back(1);
//	v.push_back(2);
//	v.push_back(3);
//	v.push_back(4);
//	v.push_back(5);
//
//	//在容器头部插入9
//	v.insert(v.begin(), 9);
//
//	//在位置3插入6
//	v.insert(v.begin()+2, 6);
//
//
//	//打印
//	for (auto e : v) 
//	{
//		cout << e << " ";
//	}
//
//	return 0;
//}

//int main()
//{
//	vector<int> v;
//
//	//使用push_back尾插5个数据
//	v.push_back(1);
//	v.push_back(2);
//	v.push_back(3);
//	v.push_back(4);
//	v.push_back(5);
//
//	//在容器头部插入5个10
//	v.insert(v.begin(), 2, 4);
//
//	//打印
//	for (auto e : v) 
//	{
//		cout << e << " ";
//	}
//
//	return 0;
//}

//int main()
//{
//	vector<int> v;
//
//	v.push_back(1);
//	v.push_back(2);
//	v.push_back(3);
//	v.push_back(4);
//	v.push_back(5);
//
//	//头删
//	v.erase(v.begin());
//
//	//尾删
//	v.erase(v.end()-1); //因为是左闭右开区间，所以end-1才能删掉‘5’
//
//	//打印
//	for (auto e : v) 
//	{
//		cout << e << " ";
//	}
//
//	return 0;
//}

//int main()
//{
//	vector<int> v;
//
//	v.push_back(0);
//	v.push_back(1);
//	v.push_back(2);
//	v.push_back(3);
//	v.push_back(4);
//	v.push_back(5);
//	v.push_back(6);
//	v.push_back(7);
//	v.push_back(8);
//	v.push_back(9);
//
//
//	//删除在该迭代器区间内的元素（左闭右开]
//	v.erase(v.begin()+3, v.end() - 3);
//
//	//打印
//	for (auto e : v) 
//	{
//		cout << e << " ";//结果：0 1 2 7 8 9
//	}
//
//	return 0;
//}

//int main()
//{
//	//容器v1
//	vector<int> v1;
//	v1.push_back(1);
//	v1.push_back(1);
//	v1.push_back(1);
//
//	//容器v2
//	vector<int> v2;
//	v2.push_back(2);
//	v2.push_back(2);
//	v2.push_back(2);
//
//	//交换v1和v2的数据
//	v1.swap(v2);
//
//	//打印v1
//	cout << "v1：";
//	for (auto e1 : v1) 
//	{
//		cout << e1 << " ";
//	}
//	cout << endl;
//
//
//	//打印v2
//	cout << "v2：";
//	for (auto e2 : v2)
//	{
//		cout << e2 << " ";
//	}
//
//	return 0;
//}

//int main()
//{
//	vector<int> v;
//
//	v.push_back(1);
//	v.push_back(2);
//	v.push_back(3);
//	v.push_back(4);
//	v.push_back(5);
//	v.push_back(6);
//
//	// 假设我要3的前面插入600
//	//vector<int>::iterator pos = find(v.begin(), v.end(), 3);
//	//上面的类型可以直接用auto去推算：
//	auto pos = find(v.begin(), v.end(), 3);
//	if (pos != v.end())
//	{
//		cout << "找到" << endl;
//		v.insert(pos, 600);
//	}
//	else
//	{
//		cout << "未找到" << endl;
//	}
//
//	for (auto e : v) 
//	{
//		cout << e << " ";
//	}
//
//	return 0;
//}

//int main()
//{
//	vector<int> v;
//
//	v.push_back(7);
//	v.push_back(1);
//	v.push_back(0);
//	v.push_back(-1);
//	v.push_back(9);
//	v.push_back(3);
//
//	// 排降序，需要包上仿函数的头文件 #include <functional> 
//	sort(v.begin(), v.end(), greater<int>());
//
//	for (auto e : v)
//	{
//		cout << e << " ";
//	}
//
//	return 0;
//}

//int main()
//{
//	vector<int> v;
//
//	v.push_back(1);
//	v.push_back(2);
//	v.push_back(3);
//	v.push_back(4);
//	v.push_back(5);
//
//	//正向迭代器遍历容器
//	vector<int>::iterator it = v.begin();
//	//也可以用auto来自动识别：auto it = v.begin();
//	while (it != v.end()) 
//	{
//		cout << *it << " ";
//		it++;
//	}
//
//	return 0;
//}

//int main()
//{
//	vector<int> v;
//
//	v.push_back(1);
//	v.push_back(2);
//	v.push_back(3);
//	v.push_back(4);
//	v.push_back(5);
//
//	//反向迭代器遍历容器
//	vector<int>::reverse_iterator it = v.rbegin();
//	//也可以用auto来自动识别：auto it = v.rbegin();
//	while (it != v.rend())
//	{
//		cout << *it << " ";
//		it++;
//	}
//
//	return 0;
//}

//int main()
//{
//	vector<int> v;
//	v.push_back(1);
//	v.push_back(2);
//	v.push_back(3);
//	v.push_back(4);
//	v.push_back(5);
//
//	vector<int>::iterator pos = find(v.begin(), v.end(), 3); //获取值为3的元素的迭代器
//
//	// 1 2 60 3 4 5
//	pos = v.insert(pos, 60); // 在3的位置前插入60，并更新 pos 的值
//
//	// 1 2 60 4 5
//	v.erase(pos+1); 
//
//	for (auto e : v)
//	{
//		cout << e << " ";
//	}
//
//	return 0;
//}

//int main()
//{
//	vector<int> v;
//	v.push_back(1);
//	v.push_back(2);
//	v.push_back(3);
//	v.push_back(4);
//	v.push_back(5);
//
//	//获取值为2的元素的迭代器
//	auto pos = find(v.begin(), v.end(), 2);
//
//	//在值为2的元素的位置插入10
//	v.insert(pos, 10);
//
//	//重新获取值为2的元素的迭代器
//	pos = find(v.begin(), v.end(), 2);
//
//	//删除元素2
//	v.erase(pos);
//
//	// 打印
//	for (auto e : v)
//	{
//		cout << e << " ";
//	}
//
//	return 0;
//}

int main()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);

	auto it = v.begin();

	v.reserve(10);

	//由于扩容，所以需要更新迭代器
	it = v.begin();

	//vector<int>::iterator it = v.begin();
	//用迭代器进行打印
	while (it != v.end()) 
	{
		cout << *it << " ";
		it++;
	}

	return 0;
}
